package com.woniuxy.shirotest;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.env.BasicIniEnvironment;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: ideaAdmin
 * TODO: Class
 * TODO: 从ini文件读取模拟的账户的权限
 * Date: 2022/2/22:18:36
 * Description:
 */

public class ShiroPermIniTest {
    public static void main(String[] args) {
        //配置ini shiro 环境
        BasicIniEnvironment basicIniEnvironment =
                new BasicIniEnvironment("classpath:shiroini/shiro-perm.ini");

        //通过环境获得一个 securityManager 安全管理
        SecurityManager securityManager = basicIniEnvironment.getSecurityManager();

        //给工具类中注入SecurityManager，表示这个工具类是基于这个环境生成的！
       SecurityUtils.setSecurityManager(securityManager);

        //获得主体对象
        Subject subject = SecurityUtils.getSubject();

        //主体进行登录，然后SecurityManager内部自己去环境匹配账号密码
        subject.login(new UsernamePasswordToken("root1","123"));

        //判断这个用户是否获得登陆认证
        System.out.println("此用户是否获得认证："  + subject.isAuthenticated());

        //获得登陆成功的用户名
        System.out.println("用户名:" + subject.getPrincipal());

        //判断登陆的用户是否拥有此角色
        System.out.println("判断此角色是否拥有role1角色：" + subject.hasRole("role1"));

        //判断登陆用户是否拥有这个权限
        System.out.println("判断此用户是否拥有'user:login'权限:" + subject.isPermitted("user:login"));
        List<String> roles = new ArrayList<>();
        roles.add("user:login");
        roles.add(",user:find");
        boolean[] booleans = subject.hasRoles(roles);
        for(boolean has : booleans){
            if(!has){
                break;
            }
        }
        System.out.println("此用户拥有" );
        roles.forEach(System.out::println);

        if(subject.isAuthenticated()){
            if(subject.hasRole("role1")){
                System.out.println("此用户成功认证 并拥有role1角色");
            }
        }



    }
}
